AvgPoolGrad
根据输入梯度对平均池化前的特征图计算反向传播梯度。
\[output_{b, x_h, x_w, c} += \frac{input_{b, y_h, y_w, c}}{\text{window}_h \cdot \text{window}_w}\]其中 \((y_h, y_w)\) 与 \((x_h, x_w)\) 之间满足窗口与步长的映射关系。
- 输入:
input - 反向传播输入梯度张量首地址。
- params - 参数数组,包含12个int类型数据,按顺序赋值以下元素:
batch - 批大小。
output_h - 池化输出高度。
output_w - 池化输出宽度。
channel - 通道数。
input_w - 池化输入宽度。
input_h - 池化输入高度。
stride_w - 水平步长。
stride_h - 垂直步长。
pad_l - 左侧填充大小。
pad_u - 上侧填充大小。
window_w - 池化窗口宽度。
window_h - 池化窗口高度。
core_mask(int, 可选) - 核掩码(仅适用于共享存储版本)。
- 输出:
output - 原地累加平均池化反向传播梯度。
- 支持平台:
FT78NEMT7004备注
FT78NE 支持 fp32 数据类型。
MT7004 支持 fp16、fp32 数据类型。
共享存储版本:
-
void hp_avg_pool_grad_s(half *input, half *output, int *params, int core_mask)
-
void fp_avg_pool_grad_s(float *input, float *output, int *params, int core_mask)
C调用示例:
1// FT78NE 多核示例 2#include <stdio.h> 3 4int main(void) { 5 const float *input = (const float *)0xA0000000; // DDR 存储 6 float *output = (float *)0xB0000000; 7 int batch = 16; 8 int output_h = 7; 9 int output_w = 7; 10 int channel = 64; 11 int input_w = 14; 12 int input_h = 14; 13 int stride_w = 2; 14 int stride_h = 2; 15 int pad_l = 0; 16 int pad_u = 0; 17 int window_w = 2; 18 int window_h = 2; 19 int params[12] = {batch, output_h, output_w, channel, input_w, input_h, stride_w, stride_h, pad_l, pad_u, window_w, window_h}; 20 int core_mask = 0xff; 21 fp_avg_pool_grad_s(input, output, params, core_mask); 22 return 0; 23}
私有存储版本:
-
void hp_avg_pool_grad_p(half *input, half *output, int *params)
-
void fp_avg_pool_grad_p(float *input, float *output, int *params)
C调用示例:
1// MT7004 单核示例 2#include <stdio.h> 3 4int main(void) { 5 const half *input = (const half *)0x10000000; // L2 存储 6 half *output = (half *)0x10004000; 7 int batch = 4; 8 int output_h = 4; 9 int output_w = 4; 10 int channel = 128; 11 int input_w = 8; 12 int input_h = 8; 13 int stride_w = 2; 14 int stride_h = 2; 15 int pad_l = 0; 16 int pad_u = 0; 17 int window_w = 2; 18 int window_h = 2; 19 int params[12] = {batch, output_h, output_w, channel, input_w, input_h, stride_w, stride_h, pad_l, pad_u, window_w, window_h}; 20 hp_avg_pool_grad_p(input, output, params); 21 return 0; 22}